package com.cell.foodie.back.admin.controller;


import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.cell.foodie.back.admin.entity.Admin;
import com.cell.foodie.back.admin.service.LoginService;
import com.cell.foodie.back.utils.Message;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * 后台管理员登录模块控制器
 * @author huhu
 *
 */
@Controller("adminLoginController")
@RequestMapping("/admin_login")
public class LoginController {
  
  @Autowired
  LoginService loginService;//自动装配后台管理员登录服务接口bean
  /**
   * 展示登录页面
   */
  @RequestMapping("/view")
  public String adminView(HttpSession session) {
    /*
     *判断登录session是否为空
     *是：返回登录页面
     *否：重定向到主页 
     */
    if(session.getAttribute("login_mession") == null) {
      return "back/login";
    }else {
      // TODO
      //重定向到主页
      return "redirect:/admin_login/index";
    }
    
  }
  /**
   * 登录的验证
   */
  @RequestMapping(value="/login",method=RequestMethod.POST)
  @ResponseBody
  public String adminLogin(HttpSession session,@RequestBody Admin admin) {
    /*
     * 获取前台传递的管理员信息
     * 对获取的数据进行查询，查询用户名和密码同时满足的数据，输出查询结果，
     * 有，输出‘登录成功’
     * 否，输出‘用户名或密码错误’ 
     */

  /*
   * 调用登录验证的服务，
   * 传入管理员参数,
   * 并反回查询结果(Boolean)，
   * true 或 false
   */ 
    Boolean result=loginService.login(admin);

    Message message = new Message();//声明一个返回信息对象
    
    ObjectMapper mapper = new ObjectMapper();//声明一个json
    
    //TODO
    /*判断用户登录待写
     *判断用户是否已登录，若登录则，输出已登录 
     */
    
    /*
     * 判断返回结果
     * 是true：
     *   将管理员信息存入session，
     *   修改返回信息对象（message）,
     *    code：true,
     *    返回信息：登录成功；
     * 否false:
     *  修改返回信息对象（message）
     *    返回信息为"用户名或密码错误"
     */
    if(result) {
      session.setAttribute("login_mession", admin);
      message.setCode(true);
      message.setData("登录成功！");
    }else {
      message.setData("用户名或密码错误");
    }
        
    String jsonMessage = null;//用来接收json序列化后的返回信息
    
    /*
     * 将message对象转为json字符串，
     * 并保存在jsonMessage中
     */
    try {
      jsonMessage = mapper.writeValueAsString(message);//转为json字符串
    } catch (JsonProcessingException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
   
    return jsonMessage;
  }
  
  /**
   * 简单的登录退出功能
   * @param session
   * @return
   */
  @RequestMapping(value="/exit",method=RequestMethod.GET)
  public String adminExit(HttpSession session) {
    session.setAttribute("login_mession", null);//清除session
    return "redirect:/admin_login/view";//重定向到登录页面
  }
  
  /**
   * 暂时主页
   */
  @RequestMapping(value="/index")
  public String index (Model model) {
    model.addAttribute("message","我是暂时主页");
    return "hello";
  }
}
